package foroweb.ejb;

import foroweb.ejb.interceptores.*;
import foroweb.entidades.*;
import java.util.*;
import javax.ejb.*;
import javax.interceptor.Interceptors;
import javax.persistence.*;

@Stateless
@LocalBean
public class AccionUsuario {

    //Atributos
    @PersistenceContext
    EntityManager em;
    @EJB
    Correo co;

    //Metodos
    @Interceptors({ComprobarContrasenya.class,ValidarEmail.class})
    public Usuario registrar(Usuario u){
        u.setPerfil(new Perfil(u.getNick()));
        u.setRegistro(new Date());
        u.setLastOn(new Date());
        u.setRuta("/resources/images/Yin-Yan.jpg");
        em.persist(u);
        co.enviar(u.getEmail(),"Foroweb-EMR: confirmacion de registro","Bienvenido, "+u.getNick()+".\nPulse este enlace para confirmar su registro:\n\nhttp://www.google.es/");
        return u;
    }
    @Interceptors({ComprobarContrasenya.class,ValidarEmail.class})
    public void modificar(Usuario u){
        em.merge(u);
    }
    public void borrar(Usuario u){
        em.remove(em.merge(u));
    }
    public List<Mensaje> obtenerMensajes(Usuario u){
        Query query=em.createQuery("select m from Mensaje m where m.usuario=:usuario");
        query.setParameter("usuario", u);
        return query.getResultList();
    }
    public List<Privado> obtenerPrivadosRecibidos(String nick){
        Query query=em.createQuery("select p from Privado p where p.destinatario.nick='"+nick+"' and p.bd='"+"false"+"' order by p.fecha desc");
        return query.getResultList();
    }
    public List<Privado> obtenerPrivadosEnviados(String nick){
        Query query=em.createQuery("select p from Privado p where p.remitente.nick='"+nick+"' and p.br='"+"false"+"' order by p.fecha desc");
        return query.getResultList();
    }

    //Automatico
    @Schedule(hour="0",minute="0", second="0")
    public void borrarUsuariosInactivos(){
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.DAY_OF_YEAR,-180);
        Query query=em.createQuery("delete from Usuario u where u.lastOn<:horaConnec and u.activo=0");
        query.setParameter ("horaConnec",c,TemporalType.TIMESTAMP);
        query.executeUpdate();
    }
    @Schedule(hour="1",minute="0", second="0")
    public void bloquearUsuariosInactivos(){
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.DAY_OF_YEAR,-90);
        Query query= em.createQuery("update Usuario u set u.activo=0 where u.lastOn<:horaConnec and u.activo=1");
        query.setParameter ("horaConnec",c,TemporalType.TIMESTAMP);
        query.executeUpdate();
    }
}
